package com.java.generic;

/**
 * 创建泛型对象：
 * 1. T a = new T(); 是不允许的；
 * 1. 泛型擦除；
 * 2. 不确定T中是否有无参构造函数
 *
 * @program: study
 * @className: TestNewT
 * @description: TODO
 * @author: kukuxiahuni
 * @create: 2019-11-27 15:10
 * @version: v1.0
 **/
public class TestNewT {

    public static void main(String[] args) {
        Creator<Integer> creator = new Creator<>();
        int a = creator.create(new IntegerFactory());
        System.out.println(a);
    }

    /**
     * 功能描述: 27 3:11 下午
     *
     * @modify_auther: kukuxiahuni
     * @modify_time: 2019/11/27 3:11 下午
     **/
    interface Factory<T> {
        T create();
    }

    static class Creator<T> {
        /**
         * 功能描述: 具体的创建方法
         *
         * @param:
         * @return:
         * @auther: kukuxiahuni
         * @date: 2019/11/27 3:12 下午
         * @modify_auther: kukuxiahuni
         * @modify_time: 2019/11/27 3:12 下午
         **/
        public <F extends Factory<T>> T create(F f) {
            return f.create();
        }
    }

    static class IntegerFactory implements Factory<Integer> {
        @Override
        public Integer create() {
            return new Integer(10);
        }
    }
}

